home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / drawer.zip / DRAGGER.PAS < prev    next >
Pascal/Delphi Source File  |  1993-01-04  |  3KB  |  147 lines

  1. {$L-,D-}
  2.  
  3. unit Draggers;
  4.  
  5. interface
  6.  
  7. type
  8.  
  9.     DragState= ( Idle, Size, Move );
  10.  
  11.     Dragger =    object
  12.                     x1, y1 : word;        { original position }
  13.                     xl, yl : word;        { last position }
  14.                     procedure StartDrag( x, y : word );
  15.                     procedure Drag( x, y : word );
  16.                     procedure EndDrag( x, y : word);
  17.                     procedure GetRange( var x1, y1, x2, y2 : word);
  18.                 end;
  19.  
  20.     BDragger =    object(Dragger)
  21.                     xm1, ym1,
  22.                     xm2, ym2 : word;    { points for Move mode }
  23.                     DS     : DragState;
  24.                     procedure Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
  25.                     procedure StartDrag( x, y : word); override;
  26.                     procedure Drag( x, y : word); override;
  27.                     procedure EndDrag( x, y : word); override;
  28.                 end;
  29.  
  30. implementation
  31.  
  32. uses MSGraph;
  33.  
  34. procedure Dragger.StartDrag( x, y : word );
  35. begin
  36.     self.x1 := x;
  37.     self.y1 := y;
  38.     self.xl := x;
  39.     self.yl := y;
  40. end;
  41.  
  42. procedure Dragger.Drag( x, y : word);
  43. begin
  44.     _SetWriteMode( _GXOR );
  45.     _SetLineStyle( $CCCC );
  46.     with self do begin
  47.         _MoveTo( x1, y1 );
  48.         _LineTo( xl, yl);
  49.         _MoveTo( x1, y1 );
  50.         _LineTo( x, y);
  51.         xl := x;
  52.         yl := y;
  53.         end;
  54. end;
  55.  
  56. procedure Dragger.EndDrag( x, y : word);
  57. begin
  58.     _SetWriteMode( _GXOR );
  59.     _SetLineStyle( $CCCC );
  60.     with self do begin
  61.         _MoveTo( x1, y1 );
  62.         _LineTo( xl, yl);
  63.         xl := x;
  64.         yl := y;
  65.         end;
  66. end;
  67.  
  68. procedure Dragger.GetRange( var x1, y1, x2, y2 : word);
  69. begin
  70.     x1 := self.x1;
  71.     y1 := self.y1;
  72.     x2 := self.xl;
  73.     y2 := self.yl;
  74. end;
  75.  
  76. procedure DrawBox( x1, y1, x2, y2 : word);
  77. begin
  78.     _SetWriteMode( _GXOR );
  79.     _SetLineStyle( $CCCC );
  80.     _Rectangle( _GBORDER, x1, y1, x2, y2);
  81. end;
  82.  
  83. procedure BDragger.Initialize( ds : DragState; xm1, ym1, xm2, ym2 : word);
  84. begin
  85.     self.DS := ds;
  86.     self.xm1 := xm1;
  87.     self.ym1 := ym1;
  88.     self.xm2 := xm2;
  89.     self.ym2 := ym2;
  90. end;
  91.  
  92. procedure BDragger.StartDrag( x, y : word);
  93. begin
  94.     with self do begin
  95.         inherited StartDrag( x, y );
  96. {        if DS=Move then DrawBox( xm1, ym1, xm2, ym2 ); }
  97.         DrawBox( xm1, ym1, xm2, ym2 );
  98.         end;
  99. end;
  100.  
  101. procedure BDragger.Drag( x, y : word );
  102. var
  103.     dx, dy : integer;
  104. begin
  105.     with self do begin
  106.         if (xl=x) and (yl=y) then exit;
  107.         if DS=Move then begin
  108.             dx := x-xl;
  109.             dy := y-yl;
  110.             DrawBox( xm1, ym1, xm2, ym2 );
  111.             inc( xm1, dx);
  112.             inc( ym1, dy);
  113.             inc( xm2, dx);
  114.             inc( ym2, dy);
  115.             DrawBox( xm1, ym1, xm2, ym2 );
  116.             end
  117.         else if DS=Size then begin
  118.             dx := x-xl;
  119.             dy := y-yl;
  120.             DrawBox( xm1, ym1, xm2, ym2 );
  121.             inc( xm2, dx);
  122.             inc( ym2, dy);
  123.             DrawBox( xm1, ym1, xm2, ym2 );
  124.             end;
  125.         xl := x;
  126.         yl := y;
  127.         end;
  128. end;
  129.  
  130. procedure BDragger.EndDrag( x, y : word);
  131. begin
  132.     with self do begin
  133.         { remove RB box }
  134.         if DS=Move then
  135.             DrawBox( xm1, ym1, xm2, ym2)
  136.         else
  137.             DrawBox( x1, y1, xl, yl);
  138.         DS := Idle;
  139.         end;
  140. end;
  141.  
  142. begin
  143. end.
  144.  
  145.  
  146.  
  147.